const Controller = require('egg').Controller;

class LoginController extends Controller {
    //注册
    async signup() {
        console.log('进入singup!')
        const {ctx, service} = this;
        //TODO Object.assign Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象分配到目标对象。
        // 它将返回目标对象。
        // Object.assign方法用于对象的合并，将源对象（source）的所有可枚举属性，复制到目标对象（target）。
        // Object.assign方法的第一个参数是目标对象，后面的参数都是源对象。，如果目标对象与源对象有同名属性，
        // 或多个源对象有同名属性，则后面的属性会覆盖前面的属性。 如果只有一个参数，Object.assign会直接返回该参数。
        // 如果该参数不是对象，则会先转成对象，然后返回。

         // const req = Object.assign(ctx.request.body);
        const { username, password } = ctx.request.body;
        const params = {
            provider: 'local',
            username,
            password
        };
        // 校验参数
        try {
            const createRule = {
                username: { type: 'string', min: 4 },
                password: { type: 'string', min: 6 }
            };
            //todo ctx.validate 校验参数
            ctx.validate(createRule, params);
        } catch (error) {
            ctx.body = {
                errcode: '1',
                errmsg: '参数校验失败'
            };
            return;
        }
        // 调用 Service 进行业务处理
        await service.login.create({ params });

    }
    //登录
    async login() {
        console.log('进入login controller!')
        const { service, ctx } = this;
        const { username, password } = ctx.request.body;
        const params = {
            provider: 'local',
            username,
            password
        };

        try {
            const createRule = {
                username: { type: 'string', min: 4 },
                password: { type: 'string', min: 4 }
            };
            ctx.validate(createRule, params);
        } catch (error) {
            ctx.body = {
                errcode: '1',
                errmsg: '参数校验失败'
            };
            return;
        }
        await service.login.login(params);

    }

    async passport() {
        console.log('进入passport路由')
        const { service, ctx } = this;
        console.log('ctx.request', ctx.request);
        ctx.body = {};
        // const { provider, password } = ctx.request.body;
        // await service.login.login({
        //   provider: 'github',
        //   username,
        //   password
        // });
    }

}
module.exports = LoginController;